package com.lagou.hadoop.sort;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * @Author chenkl
 * @Date 2020/8/9 17:39
 */
public class SortReducer extends Reducer<SortBean, NullWritable,SortBean,NullWritable> {
    // 排名
    int rank = 1;

    /**
     * Shuffle 过程中，已经对所有的key 进行了升序排列（实际上是根据key 中的value 值进行了排序），而reduce每次只需都是相同key的value值的集合调用一次，
     * 需求是打印所有数的排名和原始值，为了避免compareTo方法导致数值相等被当成对象相等，而合并了key,所以要遍历values,因为已经排序，所以排名只需要累加即可
     * @param key
     * @param values
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(SortBean key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        for (NullWritable value : values) {
            key.setRank(rank);
            context.write(key,NullWritable.get());
            rank++;
        }
    }
}
